package com.neuedu.elmserver.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.neuedu.elmserver.mapper.UsersMapper;
import com.neuedu.elmserver.pojo.Users;
import com.neuedu.elmserver.service.UsersService;
import com.neuedu.elmserver.vo.ResultVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;

import java.util.List;

/**
 * <p>
 * 用户表 服务实现类
 * </p>
 *
 * @author wyh
 * @since 2024-11-07
 */
@Service
public class UsersServiceImpl extends ServiceImpl<UsersMapper, Users> implements UsersService {

    //导入UsersMapper对象
    @Autowired
    private UsersMapper usersMapper; //service依赖mapper

    @Override
    public List<Users> queryAllUsers() {
        //mybatisplus中的方法
        List<Users> users=usersMapper.selectList(null);
        return users;
    }

    /**
     * 登录业务
     * @param username
     * @param password
     * @return
     */
    @Override
    public ResultVO userLogin(String username, String password) {
        //判断用户是否在数据库中存在：通过用户名查询该用户是否存在即可

        //构建查询条件 eq：等号   select * from users where user_name=?
        QueryWrapper qw=new QueryWrapper();
        qw.eq("user_name",username);

        //selectOne:查询单行数据
        Users users=usersMapper.selectOne(qw);

        if(users==null){
            return  ResultVO.fail("用户名不存在");
        }else{
            //判断密码是否正确
            if(users.getPassword().equals(password)){
                return  ResultVO.ok("登录成功",users);
            }
        }
        return  ResultVO.fail("密码不正确");

    }
    // 用户注册
    public ResultVO userRegister(String username, String password) {
        // 检查用户名是否已存在
        QueryWrapper<Users> qw = new QueryWrapper<>();
        qw.eq("user_name", username);
        Users existingUser = usersMapper.selectOne(qw);

        if (existingUser != null) {
            return ResultVO.fail("用户名已存在");
        }

        // 创建新用户并插入
        Users newUser = new Users();
        newUser.setUserName(username);
        newUser.setPassword(password);
        newUser.setVip(0); // 提供一个合适的默认值

        boolean success = usersMapper.insert(newUser) > 0;
        if (success) {
            return ResultVO.ok("注册成功");
        } else {
            return ResultVO.fail("注册失败");
        }
    }


    @Override
    public ResultVO changePassword(String username, String currentPassword, String newPassword) {
        // 检查用户是否存在
        QueryWrapper<Users> qw = new QueryWrapper<>();
        qw.eq("user_name", username);
        Users user = usersMapper.selectOne(qw);

        if (user == null) {
            return ResultVO.fail("用户不存在");
        }

        // 检查当前密码是否正确
        if (!user.getPassword().equals(currentPassword)) {
            return ResultVO.fail("当前密码不正确");
        }

        // 更新密码
        user.setPassword(newPassword);
        int updateCount = usersMapper.updateById(user);
        if (updateCount == 0) {
            return ResultVO.fail("密码更新失败");
        }

        return ResultVO.ok("密码修改成功");
    }

    @Override
    public ResultVO userProfile(String username) {
        // 检查用户是否存在
        QueryWrapper<Users> qw = new QueryWrapper<>();
        qw.eq("user_name", username);
        Users user = usersMapper.selectOne(qw);

        if (user == null) {
            return ResultVO.fail("用户不存在");
        }

        // 打印返回的用户数据
        System.out.println("User Info: " + user);
        return ResultVO.ok("用户资料获取成功", user);
    }

    @Override
    public ResultVO updateUserProfile(Users user) {
        // 查找用户是否存在
        QueryWrapper<Users> qw = new QueryWrapper<>();
        qw.eq("user_name", user.getUserName());
        Users existingUser = usersMapper.selectOne(qw);

        if (existingUser == null) {
            return ResultVO.fail("用户不存在");
        }

        // 使用 UpdateWrapper 更新数据
        UpdateWrapper<Users> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("user_name", user.getUserName());

        // 更新用户信息字段，这里只更新非空字段
        if (user.getUserSex() != null) {
            updateWrapper.set("user_sex", user.getUserSex());
        }
        if (user.getUserImg() != null) {
            updateWrapper.set("user_img", user.getUserImg());
        }
        if (user.getUserInfo() != null) {
            updateWrapper.set("user_info", user.getUserInfo());
        }
        if (user.getUserBirth() != null) {
            updateWrapper.set("user_birth", user.getUserBirth());
        }

        // 执行更新
        int rows = usersMapper.update(null, updateWrapper);
        System.out.println("更新的行数: " + rows);

        if (rows > 0) {
            return ResultVO.ok("用户信息更新成功", user);
        } else {
            return ResultVO.fail("更新失败");
        }

    }

    @Override
    public ResultVO beVIP(Users user) {
        UpdateWrapper uw=new UpdateWrapper();
        uw.set("VIP",1);

        uw.eq("user_id",user.getUserId());
        usersMapper.update(user,uw);
//        System.out.println(usersMapper.update(user,uw)+"----------------------------------------");
        return ResultVO.ok("更新成功");
    }
}
